// js/storage.js

const Storage = {
    // 设置存储
    set(key, value) {
        if (!key) throw new Error('Storage: Key is required');
        if (typeof value === 'object') {
            value = JSON.stringify(value); // 对象转为 JSON 字符串
        }
        localStorage.setItem(key, value);
    },

    /**
     * 获取存储
     * @param {string} key
     * @param {boolean} type 获取类型
     * @returns {Object|string} 默认返回解析后的对象，否则返回原始值
     */
    get(key,type=true) {
        if (!key) throw new Error('Storage: Key is required');
        const value = localStorage.getItem(key);
        if(!type){
            return value;
        }
        try {
            return JSON.parse(value); // 尝试将 JSON 字符串解析为对象
        } catch {
            return value; // 如果不是 JSON 字符串，则直接返回原始值
        }
    },

    // 删除存储
    remove(key) {
        if (!key) throw new Error('Storage: Key is required');
        localStorage.removeItem(key);
    },

    // 清空所有存储
    clear() {
        localStorage.clear();
    },

    // 判断是否存在某个 key
    has(key) {
        return localStorage.getItem(key) !== null;
    },

    // 获取所有存储的键值对
    getAll() {
        const all = {};
        for (let i = 0; i < localStorage.length; i++) {
            const key = localStorage.key(i);
            all[key] = this.get(key); // 使用封装的 get 方法，确保值是正确的格式
        }
        return all;
    },
};

export default Storage;
